package com.example.kotlinstudy.knowledges

// 入口函数
fun main() {
    // 有参数 有返回值的函数，fun 的写法
    fun sum(a: Int, b: Int): Int {
        return a + b
    }
    // 改写为 Lambda 表达式
    val sum2 = { a: Int, b: Int -> a + b }
    println(sum2(1, 2))
    // 将函数的类型 迁移到等号的左边
    val sum3: (Int, Int) -> Int = { a, b -> a + b }
    println(sum3(4, 10))

//  定义一个数组。里面有2-10的数字
    val array = arrayOf(2, 3, 4, 5, 6, 7, 8, 9, 10)
//  筛选出 大于等于5的数并保存，输出 array.filter(item=>item>=5)

//        val newArray = array.filter { a -> a >= 5 }
    // 如果参数只有一个，可以直接把参数的声明都省略，这个时候 必须用 it 来表示参数
    val newArray = array.filter { it >= 5 }
    println(newArray)

//  将数组 翻倍
    val newArray2 = array.map { item -> item * 2 }
//    val newArray2 = array.map { it * 2 }
    println(newArray2)

//  对数组进行累加
    val sum4 = array.reduce { acc, i -> acc + i }
//  帮我把这个改为 可读性更高的写法，这个我看不懂 o(╥﹏╥)o
//    帮我加上适当的注释
    //  累加的过程中，acc 是累加的结果，i 是当前的元素
    //  第一次累加，acc 是 2，i 是 3
    //  第二次累加，acc 是 5，i 是 4
    //  第三次累加，acc 是 9，i 是 5
    //  第四次累加，acc 是 14，i 是 6
    //  第五次累加，acc 是 20，i 是 7
    //  第六次累加，acc 是 27，i 是 8
    //  第七次累加，acc 是 35，i 是 9
    //  第八次累加，acc 是 44，i 是 10
    val sum5 = array.reduce { acc, i ->
        println("acc = $acc")
        println("i = $i")
        acc + i
    }
    println(sum4)

}
